Protecting data is a significant concern to all entities that use data. In fact, an entity that does not protect its data will likely lose that data at some point for a variety of reasons. Thus, entities rely on data protection systems to generate backups of their data. By backing up their data, an entity can insure themselves from the consequences of a catastrophic loss of data.
Backups can be generated in a lot of different ways by data protection systems. Some data protection systems may protect data by replicating the data. Replication allows the replicated data to be much closer to the production data. In fact, replicated data can be close to mirrored data. However, replicating data, particularly when the data is compressed, can require substantial computing resources and consume significant bandwidth.
Conventionally, compressed data is replicated in accordance with a particular protocol, for example SCSI (Small Computer System Interface). In order to replicate compressed data, the compressed data is first accessed from the storage array. Next, the compressed data is decompressed. The decompressed data can then be transmitted to a destination or recipient. If the data is to be stored in a compressed form, the recipient may be required to compress the data and store the compressed data. This process consumes computing resources (compressing/decompressing the data) and bandwidth (transmitting uncompressed data instead of compressed data).
This process, however, is complicated by the fact that it is difficult to simply read and transmit compressed data. More specifically, the initiator and/or recipient of the data may know the size of the uncompressed data, but the initiator does not know the size of the compressed data. As a result, a read command (such as a SCSI read command that a server issues to a storage array) will fail because the amount of compressed data does not correspond to the amount of data requested (e.g., the uncompressed size). Thus, it is necessary for the storage array to decompress the data prior to transmitting the data. Systems and methods are therefore needed to conserve processing, memory or other computing resources and limit the amount of bandwidth used in transmitting data.